package 力扣91;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @ClassName : Day12_146_LRU缓存机制
 * @Author : 骆发茂
 * @Date: 2021/12/23 12:14
 * @Description : https://leetcode-cn.com/problems/lru-cache/
 * https://leetcode-cn.com/problems/lru-cache/solution/java-shi-yong-linkedhashmapshi-xian-lru-t279i/
 */
public class Day12_146_LRU缓存机制_from题解 {
    class LRUCache {
        private Map<Integer, Integer> map;
        private int cap;

        public LRUCache(int capacity) {
            map = new LinkedHashMap<>();
            cap = capacity;
        }

        public int get(int key) {
            // key不存在，访问不到
            if (!map.containsKey(key)) {
                return-1;
            }

            // key存在，需要将keyPair放到最后
            int val = map.remove(key);
            map.put(key, val);
            return val;
        }

        public void put(int key, int value) {
            // key存在，将存在的keyPair放到最后，并更新上新value
            if (map.containsKey(key)) {
                map.remove(key);
                map.put(key, value);
                return;
            }

            // key不存在，直接放到最后
            //不管有没有超出容量，这句话一定要执行。
            map.put(key, value);

            // 检查缓存容量，超出上限，则移除第一个
            if (map.size() > cap) {
                map.remove(map.entrySet().iterator().next().getKey());

            }
        }
    }




}